package com.office.web.controller.common;

import cn.hutool.core.io.FileUtil;
import com.office.common.core.controller.BaseController;
import com.office.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

@RestController
@Api(tags = "文件上传与下载模块")
@RequestMapping("/file")
public class FileController extends BaseController {
//    @Value("${ip:localhost}")
//    String ip;//通过配置文件拿到ip
//
//    @Value("${server.port}")
//    String port;

    private static final String ROOT_PATH = System.getProperty("user.dir") + File.separator + "files";//文件根目录

    @ApiOperation(value = "文件上传")
    @PostMapping("/upload")
    public AjaxResult Upload(@RequestPart("file") MultipartFile file) throws IOException, IOException {//MultipartFile file 输入的文件
        String originalFilename = file.getOriginalFilename();//originalFilename是获取源文件名
        String mainName = FileUtil.mainName(originalFilename);// mainName 是主文件名
        String extName = FileUtil.extName(originalFilename);//extName 是文件的标识 png、pdf等
        if (!FileUtil.exist(ROOT_PATH)) {//通过hutool工具类中的FileUtil来判断我们的根目录是否存在，若不存在则在根目录下创建file文件夹
            FileUtil.mkdir(ROOT_PATH);
        }
        //判断file文件夹中传入的文件是否存在，若存在为了防止重名不被替换，则需要对文件重新命名
        if (FileUtil.exist(ROOT_PATH + File.separator + originalFilename)) {
            originalFilename = System.currentTimeMillis() + "_" + mainName + "." + extName;
        }
        File saveFile = new File(ROOT_PATH + File.separator + originalFilename);//创建一个file文件对象，方便写入磁盘
        file.transferTo(saveFile);//存储文件到本地磁盘里面去
        String url = "http://192.168.1.83" + ":" + 8080 + "/file/download/" + originalFilename;//问价下载的路径
        return AjaxResult.success(url);//RuoYi自带的结果集
    }


    @ApiOperation(value = "文件下载")
    @GetMapping("/download/{fileName}")
    public void download(@PathVariable String fileName, HttpServletResponse response) throws IOException {
//        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));//文件下载
        response.addHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8"));//文件预览
        String filePath = ROOT_PATH + File.separator + fileName;//拿到文件的路径
        if (!FileUtil.exist(filePath)) {//文件不存在，就不用管，因为没有东西可写
            return;
        }

        byte[] bytes = FileUtil.readBytes(filePath);//使用FileUtil从filePath中去读取文件
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(bytes);//把文件的字节数写出去
        outputStream.flush();//刷新一下
        outputStream.close();//一定要关闭文件流
    }
}
